import java.io.IOException;
import java.net.*;
import java.util.Scanner;

//回显客户端
public class EchoClient {
    private DatagramSocket socket=null;
    //客户端向服务器发送请求，需要知道服务器的ip和端口号
    private String serverIp;
    private int serverPort;

    //构造方法
    public EchoClient(String serverIp,int serverPort) throws SocketException {
        this.serverIp=serverIp;
        this.serverPort=serverPort;
        socket=new DatagramSocket();
    }

    //启动客户端，完成主要的业务逻辑
    public void start() throws IOException {
        Scanner scanner=new Scanner(System.in);

        System.out.println("客户端启动！");
        while(true){
            //1.从控制台读取用户输入的内容
            System.out.print(">");//
            String request=scanner.next();
            //2.构造成UDP请求并发送，不要光天内容，还要填服务器的地址和端口
            DatagramPacket reqPacket=new DatagramPacket(request.getBytes(),request.getBytes().length, InetAddress.getByName(serverIp),serverPort);
            socket.send(reqPacket);
            //3.读取服务器的响应
            DatagramPacket respPacket=new DatagramPacket(new byte[4096],4096);
            socket.receive(respPacket);//读取到的内容填充到respPacket里
            String response=new String (respPacket.getData(),0,respPacket.getLength());
            //4.把响应显示到控制台
            System.out.println(response);
 }
    }

    public static void main(String[] args) throws IOException {
        EchoClient echoClient=new EchoClient("127.0.0.1",9090);
        echoClient.start();
    }

}
/*
InetAddress.getByName(serverIp) 是 Java 中 InetAddress 类的一个静态方法，用于根据提供的主机名或 IP 地址字符串来获取对应的 InetAddress 对象。下面为你详细介绍：

方法定义
public static InetAddress getByName(String host) throws UnknownHostException

参数：host 是一个字符串，表示主机名（如 "www.example.com"）或 IP 地址（如 "192.168.1.1"）。
返回值：返回一个 InetAddress 对象，该对象封装了指定主机的 IP 地址和主机名。
异常：如果无法解析该主机名或 IP 地址，会抛出 UnknownHostException 异常。
*/